package com.demo.java.OD51_100.OD85;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【整数分解 用连续自然数之和来表达整数】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145654128
 */
public class OdMain {
    public static void main(String[] args) {
        try {
            Scanner s = new Scanner(System.in);
            int t = s.nextInt();  // 读取输入的整数t
            if (t < 1 || t > 1000) {
                System.out.println("input error");
                return;
            }

            // 输出 t 本身
            System.out.println(t + "=" + t);

            // 用于保存所有分解方式的结果
            List<String> resultList = new ArrayList<>();

            // 找到所有的分解方式
            for (int j = 1; j < t; j++) {
                int total = 0;
                StringBuilder sb = new StringBuilder();

                // 从 j 开始累加直到得到总和为 t
                for (int k = j; total < t; ++k) {
                    total += k;
                    if (total == t) {
                        sb.append(k);  // 找到一个有效的分解方式
                        resultList.add(t + "=" + sb);  // 添加到结果列表
                        break;
                    }
                    sb.append(k).append("+");
                }
            }

            // 按照每个分解方式的长度排序
            resultList.sort(Comparator.comparingInt(String::length));

            // 输出所有的分解方式
            resultList.forEach(System.out::println);

            // 输出分解方式的总数
            System.out.println("Result:" + (resultList.size() + 1));
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("input error");
        }
    }

}